Матч
327, Забавный забор (FunnyFence)
Дивизион 2,
Уровень 1
Последовательность символов
называется забором, если она состоит из чередующихся символов ‘|’ и ‘-’.
Например, “|-|-|-|” и
“-|-|” и являются забором , а “|-||-|” и “--” нет. В заданной строке необходимо найти наибольшую подстроку,
являющуюся забором, и вывести ее длину. Подстрока состоит из последовательно
стоящих символов.
Класс: FunnyFence
Метод: int getLength(string
s)
Ограничения: s содержит от 1 до 50 символов, строка s
содержит только символы ‘|’ и ‘-’.
Вход. Строка символов s.
Выход. Длина наибольшей подстроки, являющуюся забором.
Пример входа
s |
"|-|-|" |
"-|-|-|-" |
"||||||" |
"|-|---|-|---|-|" |
Пример выхода
5
7
1
5
РЕШЕНИЕ
обработка последовательности
Задача требует линейного прохода
по строке и нахождения наибольшей последовательности попарно разных
последовательно стоящих символов. В переменной c подсчитывается длина текущего забора, в res запоминается наибольшая длина забора.
ПРОГРАММА
#include <cstdio>
#include <string>
using namespace std;
class FunnyFence
{
public:
int getLength(string s)
{
int i, c = 1, res = 0;
for(i = 0; i < s.size()-1; i++)
if (s[i] != s[i+1]) c++;
else
{
if (c > res) res = c;
c = 1;
}
if (c > res) res = c;
return res;
}
};